package com.wxh.restful.common;

import com.wxh.restful.enums.ResultCode;
import lombok.Data;

import java.io.Serializable;

/**
 * @ClassName: ResultInfo
 * @Description: 响应结果信息类
 * @Author wxh
 * @Date: 2020/7/17 14:30
 * @Version V1.0.0
 * @Since 1.8
 */
@Data
public class ResultInfo implements Serializable {
    /**
     * 响应消息状态码
     */
    private Integer code;
    /**
     *  响应消息描述
     */
    private String message;
    /**
     * 响应消息数据
     */
    private Object data;

    public ResultInfo(){

    }
    /**
     *  构建响应结果信息类
     * @param resultCode 状态码枚举类
     * @param data 查询的数据对象
     */
    public ResultInfo(ResultCode resultCode, Object data) {
        this.code = resultCode.code();
        this.message = resultCode.message();
        this.data = data;
    }


    /**
     *  无参数，成功方法
     * @return ResultInfo
     */
    public static ResultInfo success(){
        ResultInfo resultInfo = new ResultInfo();
        resultInfo.setResultCode(ResultCode.SUCCESS);
        return resultInfo;
    }

    /**
     * 有参数，成功方法
     * @param data 查询数据对象
     * @return ResultInfo
     */
    public static ResultInfo success(Object data){
        ResultInfo resultInfo = new ResultInfo();
        resultInfo.setResultCode(ResultCode.SUCCESS);
        resultInfo.setData(data);
        return resultInfo;
    }

    /**
     *  有参数，失败方法
     * @return ResultInfo
     */
    public static ResultInfo failure(ResultCode resultCode){
        ResultInfo resultInfo = new ResultInfo();
        resultInfo.setResultCode(resultCode);
        return resultInfo;
    }

    /**
     * 有参数，失败方法
     * @param data 查询数据对象
     * @return ResultInfo
     */
    public static ResultInfo failure(ResultCode resultCode,Object data){
        ResultInfo resultInfo = new ResultInfo();
        resultInfo.setResultCode(resultCode);
        resultInfo.setData(data);
        return resultInfo;
    }

    /**
     *  构建ResultInfo
     * @param code 消息状态码
     * @param message 消息描述
     * @param data 查询数据
     * @return ResultInfo
     */
    public static ResultInfo failure(Integer code,String message,Object data){
        ResultInfo resultInfo = new ResultInfo();
        resultInfo.setCode(code);
        resultInfo.setMessage(message);
        resultInfo.setData(data);
        return resultInfo;
    }

    /**
     *  设置状态码和消息描述
     * @param resultCode 状态码枚举对象
     */
    private void setResultCode(ResultCode resultCode) {
        this.code = resultCode.code();
        this.message = resultCode.message();
    }
}
